The invention relates generally to software integration verification. In particular, the invention relates to using a command file and optionally user interaction to represent the inputs from an operator and/or external subsystems. The effects of the inputs on the HCI software are validated against expected responses.
Modern operational control, such as for a ship-board combat platform, typically requires an integrated computer system to receive data, select appropriate options and transmit instructions to and from components for instrumentation and execution. Construction of such a system can require integration of many separate processes, each receiving and transmitting data in coöperation with other related processes.
In addition to creation and assembly of hardware electronic components for receiving information and transmitting commands, software code must be prepared and compiled to interpret and execute instructions that perform the system operations. Prior to complete integration, verification of separate components is performed by a testing operator in combination with simulation software processes. The development alone of the simulation software itself is immense and may become necessary at an early stage in the development cycle. The time and effort required of the testing operator to completely verify the software component is extensive to cover the plethora of different input combinations. This represents a time-consuming and error-prone process.
Such component operation testing typically involves executing the component's instruction software and simulating its external subsystems from which to receive anticipated input and submit appropriate output. Such code must be sufficiently robust to not only properly execute the intended functions on command, but also recover gracefully from inappropriate inputs and other faulty conditions without undue and potentially catastrophic interruption. The simulation procedure involves preparing a test driver to be executed under sets of conditions and selections.
The production software, as well as the simulation software, requires a graphical user interface (GUI). The program renders its GUI to respond to user interaction (e.g., weapon selection) while concurrently operating another device (e.g., tracking a target). Execution of a software application involves kernel scheduling, such as by an operating system process or by a thread of execution. A process is used to instantiate (i.e., run an instance of) a program.
Processors typically operate independently and carry extensive state information regarding operation status (e.g., running, blocked, ready). By contrast, threads share the state information of a single process, memory, address space and other resources with each other. A process switches between threads, whereas multiple threads switch by time slicing. Multi-threading between threads is generally faster than context switching between processes, providing a speed advantage on a cluster of machines. Implementing threads may require careful scheduling to rendezvous properly for processing data in the correct order.
Conventional methods of testing software components require a separate test driver for each component. Each test driver is unique to the software component under test and is neither reusable nor applicable to other components to be tested. Each software developer has a different method or style of testing software and thus the test drivers are usually not transferable to other developers or even other software components. Regression testing or comparing actual results with expected results must be conducted manually by observing the actual results, or the test driver has to be modified to perform the comparison.
For a test of software, an operator may interact with a GUI-equipped client platform referred to as a Human Computer Interface (HCI) as one component in a control system. One or more data servers may communicate with the HCI to simulate an associated device in the control system. The data servers may interact with one or more server threads in the HCI. The operator may interact through an interface thread that displays a GUI window for each instantiated executable program. The server and interface threads may exchange information between each other, with each window responding to condition changes caused by the exchanges.